// 在页面或组件中导入
import validate from 'wechat-validate'
Page({
  // 通过 behaviors 注入 validate 方法
  behaviors: [validate],
  data: {
    // 校验规则
    mobile: '13392052136',
    code: '',
    countDownVisible: false,
    // 之前的页面路径
    redirectURl: '',
  },
  rules: {
    mobile: [
      {
        required: true,
        message: '当前手机号不能为空!',
      },
      {
        pattern: /^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/,
        message: '请检查手机号码是否正确!',
      },
    ],
    code: [
      {
        required: true,
        message: '请填写短信验证码!',
      },
      {
        pattern: /^\d{6}$/,
        message: '当前短信验证码有误!',
      },
    ],
  },
  async getCode() {
    // 单独只验证 mobile 这个数据
    const { valid, message } = this.validate('mobile')

    if (!valid) {
      wx.showToast({
        title: message,
        icon: 'none',
      })
      return
    }

    if (this.data.countDownVisible) return
    this.setData({
      countDownVisible: true,
    })

    const {
      data: { code },
    } = await wx.http.get('/code', {
      mobile: this.data.mobile,
    })

    wx.showToast({
      title: `验证码为${code}`,
      icon: 'none',
      duration: 5000,
    })
  },

  async login() {
    // 验证 rules 中定义的全部数据
    const isAllValid = this.validate()
    if (!isAllValid) return

    const {
      data: { token, refreshToken },
    } = await wx.http.post('/login', {
      mobile: this.data.mobile,
      code: this.data.code,
    })

    // 存储数据到本地
    getApp().setToken(token)
    getApp().setRefreshToken(refreshToken)

    const url = this.data.redirectURl
    // 判断是否是 tabbar 页面
    if (url.includes('pages/my/index') || url.includes('pages/index/index')) {
      wx.utils.toast('登录成功')
      // 返回tabbar页面
      return wx.switchTab({
        url: `/${url}`,
      })
    }

    // 返回非tabbar页面
    return wx.redirectTo({
      url: `/${url}`,
    })
  },
  // 输入框双向绑定
  inpMoblieVal(e) {
    this.setData({
      mobile: e.detail,
    })
  },
  // 输入框双向绑定
  inpCodeVal(e) {
    this.setData({
      code: e.detail,
    })
  },
  // 计时器
  countDownChange(ev) {
    this.setData({
      // 当前倒计时事件信息（时分秒等）
      timeData: ev.detail,
      // 控制倒计时组件的显示状态
      // 60秒会被认为00:01:00，所以需要增加一条件即：分等于1时也应该是让倒计时显示
      countDownVisible: ev.detail.seconds > 0 || ev.detail.minutes === 1,
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      redirectURl: options.redirectURl,
    })
  },
})
